如果你平常連上 mitm.it,你會看到以下畫面。
If you can see this, traffic is not passing through mitmproxy.
如字面上的意思,如果你看到這個頁面,代表你的連線沒有通過 mitmproxy。
反之,如果有讓連線通過 mitmproxy,那麼就能看到這個頁面。
當中間人攻擊發生的時候,其中間人可以對封包進行一切的竄改。
mitm.it 可以理解成一個保留字,當你想要連線到 mitm.it 的時候,mitmproxy 就會自動劫持這個連線,回傳自己準備好的頁面給你。
這是為什麼可以連線到 mitm.it 的時候,下載的憑證卻是自己準備好的。
平常我們連線到 Steam 商店頁面可能會像是這樣。
mitmproxy 允許我們注入一段 Python 的程式碼,我們可以根據前面的例子,做出一個一模一樣的中間人攻擊。
讓我們把想要前往 Steam 商店頁面的封包都回傳我的名字。
import mitmproxy
def request(flow: mitmproxy.http.HTTPFlow):
if flow.request.host == 'store.steampowered.com':
flow.response = mitmproxy.http.HTTPResponse.make(
content = 'Yotsuba'
)
執行的時候加入 -s 參數。
$ mitmproxy -s your_script.py
再次連線,畫面應該會變成這樣。
上面的範例取自我以前在巴哈小屋發表的 教你如何分辨釣魚網站。
當時我的 mitmproxy 是版本 7,現在的範例則是版本 8。
撰寫今天的範例的時候,我發現 mitmproxy.http.Response 會報錯,版本 8 應該使用 mitmproxy.http.HTTPResponse 才可以。